package com.luych.toolbox.docker.service.sdk.container.model;

import com.fasterxml.jackson.annotation.JsonProperty;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class DockerContainerInspectResult {

    @JsonProperty("Path")
    private String path;

    @JsonProperty("Args")
    private List<String> args;

    @JsonProperty("ProcessLabel")
    private String processLabel;

    @JsonProperty("Mounts")
    private List<Mount> mounts;

    @JsonProperty("Config")
    private Config config;

    @JsonProperty("AppArmorProfile")
    private String appArmorProfile;

    @JsonProperty("Driver")
    private String driver;

    @JsonProperty("HostsPath")
    private String hostsPath;

    @JsonProperty("HostnamePath")
    private String hostnamePath;

    @JsonProperty("Image")
    private String image;

    @JsonProperty("Created")
    private String created;

    @JsonProperty("Name")
    private String name;

    @JsonProperty("RestartCount")
    private Long restartCount;

    @JsonProperty("NetworkSettings")
    private NetworkSettings networkSettings;

    @JsonProperty("MountLabel")
    private String mountLabel;

    @JsonProperty("ResolvConfPath")
    private String resolvConfPath;

    @JsonProperty("State")
    private State state;

    @JsonProperty("ExecIDs")
    private List<String> execIDs;

    @JsonProperty("HostConfig")
    private HostConfig hostConfig;

    @JsonProperty("Id")
    private String id;

    @JsonProperty("LogPath")
    private String logPath;

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public List<String> getArgs() {
        return args;
    }

    public void setArgs(List<String> args) {
        this.args = args;
    }

    public String getProcessLabel() {
        return processLabel;
    }

    public void setProcessLabel(String processLabel) {
        this.processLabel = processLabel;
    }

    public List<Mount> getMounts() {
        return mounts;
    }

    public void setMounts(List<Mount> mounts) {
        this.mounts = mounts;
    }

    public Config getConfig() {
        return config;
    }

    public void setConfig(Config config) {
        this.config = config;
    }

    public String getAppArmorProfile() {
        return appArmorProfile;
    }

    public void setAppArmorProfile(String appArmorProfile) {
        this.appArmorProfile = appArmorProfile;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getHostsPath() {
        return hostsPath;
    }

    public void setHostsPath(String hostsPath) {
        this.hostsPath = hostsPath;
    }

    public String getHostnamePath() {
        return hostnamePath;
    }

    public void setHostnamePath(String hostnamePath) {
        this.hostnamePath = hostnamePath;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getCreated() {
        return created;
    }

    public Date getCreatedDate() {
        if (created == null) return null;
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(created, DateTimeFormatter.ISO_DATE_TIME);
        return Date.from(zonedDateTime.toInstant());
    }

    public void setCreated(String created) {
        this.created = created;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Long getRestartCount() {
        return restartCount;
    }

    public void setRestartCount(Long restartCount) {
        this.restartCount = restartCount;
    }

    public NetworkSettings getNetworkSettings() {
        return networkSettings;
    }

    public void setNetworkSettings(NetworkSettings networkSettings) {
        this.networkSettings = networkSettings;
    }

    public String getMountLabel() {
        return mountLabel;
    }

    public void setMountLabel(String mountLabel) {
        this.mountLabel = mountLabel;
    }

    public String getResolvConfPath() {
        return resolvConfPath;
    }

    public void setResolvConfPath(String resolvConfPath) {
        this.resolvConfPath = resolvConfPath;
    }

    public State getState() {
        return state;
    }

    public void setState(State state) {
        this.state = state;
    }

    public List<String> getExecIDs() {
        return execIDs;
    }

    public void setExecIDs(List<String> execIDs) {
        this.execIDs = execIDs;
    }

    public HostConfig getHostConfig() {
        return hostConfig;
    }

    public void setHostConfig(HostConfig hostConfig) {
        this.hostConfig = hostConfig;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getLogPath() {
        return logPath;
    }

    public void setLogPath(String logPath) {
        this.logPath = logPath;
    }

    public static class Mount {

        @JsonProperty("Destination")
        private String destination;

        @JsonProperty("Propagation")
        private String propagation;

        @JsonProperty("RW")
        private Boolean rW;

        @JsonProperty("Mode")
        private String mode;

        @JsonProperty("Driver")
        private String driver;

        @JsonProperty("Source")
        private String source;

        @JsonProperty("Name")
        private String name;

        public String getDestination() {
            return destination;
        }

        public void setDestination(String destination) {
            this.destination = destination;
        }

        public String getPropagation() {
            return propagation;
        }

        public void setPropagation(String propagation) {
            this.propagation = propagation;
        }

        public Boolean getrW() {
            return rW;
        }

        public void setrW(Boolean rW) {
            this.rW = rW;
        }

        public String getMode() {
            return mode;
        }

        public void setMode(String mode) {
            this.mode = mode;
        }

        public String getDriver() {
            return driver;
        }

        public void setDriver(String driver) {
            this.driver = driver;
        }

        public String getSource() {
            return source;
        }

        public void setSource(String source) {
            this.source = source;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }

    public static class NetworkSettings {

        @JsonProperty("HairpinMode")
        private Boolean hairpinMode;

        @JsonProperty("Networks")
        private Map<String, Network> networks;

        @JsonProperty("SandboxKey")
        private String sandboxKey;

        @JsonProperty("GlobalIPv6Address")
        private String globalIPv6Address;

        @JsonProperty("GlobalIPv6PrefixLen")
        private Long globalIPv6PrefixLen;

        @JsonProperty("IPPrefixLen")
        private Long iPPrefixLen;

        @JsonProperty("MacAddress")
        private String macAddress;

        @JsonProperty("SandboxID")
        private String sandboxID;

        @JsonProperty("LinkLocalIPv6Address")
        private String linkLocalIPv6Address;

        @JsonProperty("LinkLocalIPv6PrefixLen")
        private Long linkLocalIPv6PrefixLen;

        @JsonProperty("Gateway")
        private String gateway;

        @JsonProperty("EndpointID")
        private String endpointID;

        @JsonProperty("IPv6Gateway")
        private String iPv6Gateway;

        @JsonProperty("IPAddress")
        private String iPAddress;

        @JsonProperty("Bridge")
        private String bridge;

        public Boolean getHairpinMode() {
            return hairpinMode;
        }

        public void setHairpinMode(Boolean hairpinMode) {
            this.hairpinMode = hairpinMode;
        }

        public Map<String, Network> getNetworks() {
            return networks;
        }

        public void setNetworks(Map<String, Network> networks) {
            this.networks = networks;
        }

        public String getSandboxKey() {
            return sandboxKey;
        }

        public void setSandboxKey(String sandboxKey) {
            this.sandboxKey = sandboxKey;
        }

        public String getGlobalIPv6Address() {
            return globalIPv6Address;
        }

        public void setGlobalIPv6Address(String globalIPv6Address) {
            this.globalIPv6Address = globalIPv6Address;
        }

        public Long getGlobalIPv6PrefixLen() {
            return globalIPv6PrefixLen;
        }

        public void setGlobalIPv6PrefixLen(Long globalIPv6PrefixLen) {
            this.globalIPv6PrefixLen = globalIPv6PrefixLen;
        }

        public Long getiPPrefixLen() {
            return iPPrefixLen;
        }

        public void setiPPrefixLen(Long iPPrefixLen) {
            this.iPPrefixLen = iPPrefixLen;
        }

        public String getMacAddress() {
            return macAddress;
        }

        public void setMacAddress(String macAddress) {
            this.macAddress = macAddress;
        }

        public String getSandboxID() {
            return sandboxID;
        }

        public void setSandboxID(String sandboxID) {
            this.sandboxID = sandboxID;
        }

        public String getLinkLocalIPv6Address() {
            return linkLocalIPv6Address;
        }

        public void setLinkLocalIPv6Address(String linkLocalIPv6Address) {
            this.linkLocalIPv6Address = linkLocalIPv6Address;
        }

        public Long getLinkLocalIPv6PrefixLen() {
            return linkLocalIPv6PrefixLen;
        }

        public void setLinkLocalIPv6PrefixLen(Long linkLocalIPv6PrefixLen) {
            this.linkLocalIPv6PrefixLen = linkLocalIPv6PrefixLen;
        }

        public String getGateway() {
            return gateway;
        }

        public void setGateway(String gateway) {
            this.gateway = gateway;
        }

        public String getEndpointID() {
            return endpointID;
        }

        public void setEndpointID(String endpointID) {
            this.endpointID = endpointID;
        }

        public String getiPv6Gateway() {
            return iPv6Gateway;
        }

        public void setiPv6Gateway(String iPv6Gateway) {
            this.iPv6Gateway = iPv6Gateway;
        }

        public String getiPAddress() {
            return iPAddress;
        }

        public void setiPAddress(String iPAddress) {
            this.iPAddress = iPAddress;
        }

        public String getBridge() {
            return bridge;
        }

        public void setBridge(String bridge) {
            this.bridge = bridge;
        }

        public static class Network {

            @JsonProperty("Gateway")
            private String gateway;

            @JsonProperty("GlobalIPv6Address")
            private String globalIPv6Address;

            @JsonProperty("EndpointID")
            private String endpointID;

            @JsonProperty("IPPrefixLen")
            private Long iPPrefixLen;

            @JsonProperty("IPv6Gateway")
            private String iPv6Gateway;

            @JsonProperty("GlobalIPv6PrefixLen")
            private Long globalIPv6PrefixLen;

            @JsonProperty("NetworkID")
            private String networkID;

            @JsonProperty("IPAddress")
            private String iPAddress;

            @JsonProperty("MacAddress")
            private String macAddress;

            public String getGateway() {
                return gateway;
            }

            public void setGateway(String gateway) {
                this.gateway = gateway;
            }

            public String getGlobalIPv6Address() {
                return globalIPv6Address;
            }

            public void setGlobalIPv6Address(String globalIPv6Address) {
                this.globalIPv6Address = globalIPv6Address;
            }

            public String getEndpointID() {
                return endpointID;
            }

            public void setEndpointID(String endpointID) {
                this.endpointID = endpointID;
            }

            public Long getiPPrefixLen() {
                return iPPrefixLen;
            }

            public void setiPPrefixLen(Long iPPrefixLen) {
                this.iPPrefixLen = iPPrefixLen;
            }

            public String getiPv6Gateway() {
                return iPv6Gateway;
            }

            public void setiPv6Gateway(String iPv6Gateway) {
                this.iPv6Gateway = iPv6Gateway;
            }

            public Long getGlobalIPv6PrefixLen() {
                return globalIPv6PrefixLen;
            }

            public void setGlobalIPv6PrefixLen(Long globalIPv6PrefixLen) {
                this.globalIPv6PrefixLen = globalIPv6PrefixLen;
            }

            public String getNetworkID() {
                return networkID;
            }

            public void setNetworkID(String networkID) {
                this.networkID = networkID;
            }

            public String getiPAddress() {
                return iPAddress;
            }

            public void setiPAddress(String iPAddress) {
                this.iPAddress = iPAddress;
            }

            public String getMacAddress() {
                return macAddress;
            }

            public void setMacAddress(String macAddress) {
                this.macAddress = macAddress;
            }
        }
    }

    public static class HostConfig {

        @JsonProperty("DeviceRequests")
        private List<DeviceRequest> deviceRequests;

        @JsonProperty("ReadonlyRootfs")
        private Boolean readonlyRootfs;

        @JsonProperty("BlkioWeightDevice")
        private List<BlkioWeightDevice> blkioWeightDevice;

        @JsonProperty("OomKillDisable")
        private Boolean oomKillDisable;

        @JsonProperty("Memory")
        private Long memory;

        @JsonProperty("Privileged")
        private Boolean privileged;

        @JsonProperty("AutoRemove")
        private Boolean autoRemove;

        @JsonProperty("MaximumIOBps")
        private Long maximumIOBps;

        @JsonProperty("CpuPeriod")
        private Long cpuPeriod;

        @JsonProperty("Sysctls")
        private Map<String, String> sysctls;

        @JsonProperty("PortBindings")
        private Map<String, List<PortBinding>> portBindings;

        @JsonProperty("LxcConf")
        private List<Object> lxcConf;

        @JsonProperty("Devices")
        private List<Object> devices;

        @JsonProperty("BlkioWeight")
        private Long blkioWeight;

        @JsonProperty("CpuPercent")
        private Long cpuPercent;

        @JsonProperty("VolumeDriver")
        private String volumeDriver;

        @JsonProperty("PublishAllPorts")
        private Boolean publishAllPorts;

        @JsonProperty("Ulimits")
        private List<Ulimit> ulimits;

        @JsonProperty("CpusetCpus")
        private String cpusetCpus;

        @JsonProperty("CpuRealtimePeriod")
        private Long cpuRealtimePeriod;

        @JsonProperty("IpcMode")
        private String ipcMode;

        @JsonProperty("MemoryReservation")
        private Long memoryReservation;

        @JsonProperty("BlkioDeviceWriteIOps")
        private List<BlkioDeviceWriteIOp> blkioDeviceWriteIOps;

        @JsonProperty("CpusetMems")
        private String cpusetMems;

        @JsonProperty("BlkioDeviceWriteBps")
        private List<BlkioDeviceWriteBp> blkioDeviceWriteBps;

        @JsonProperty("RestartPolicy")
        private RestartPolicy restartPolicy;

        @JsonProperty("CpuRealtimeRuntime")
        private Long cpuRealtimeRuntime;

        @JsonProperty("NetworkMode")
        private String networkMode;

        @JsonProperty("PidMode")
        private String pidMode;

        @JsonProperty("BlkioDeviceReadBps")
        private List<BlkioDeviceReadBp> blkioDeviceReadBps;

        @JsonProperty("CpuShares")
        private Long cpuShares;

        @JsonProperty("NanoCpus")
        private Long nanoCpus;

        @JsonProperty("MaximumIOps")
        private Long maximumIOps;

        @JsonProperty("MemorySwap")
        private Long memorySwap;

        @JsonProperty("ContainerIDFile")
        private String containerIDFile;

        @JsonProperty("OomScoreAdj")
        private Long oomScoreAdj;

        @JsonProperty("BlkioDeviceReadIOps")
        private List<BlkioDeviceReadIOp> blkioDeviceReadIOps;

        @JsonProperty("ShmSize")
        private Long shmSize;

        @JsonProperty("KernelMemory")
        private Long kernelMemory;

        @JsonProperty("LogConfig")
        private LogConfig logConfig;

        @JsonProperty("Dns")
        private List<String> dns;

        @JsonProperty("ExtraHosts")
        private List<String> extraHosts;

        public List<DeviceRequest> getDeviceRequests() {
            return deviceRequests;
        }

        public void setDeviceRequests(List<DeviceRequest> deviceRequests) {
            this.deviceRequests = deviceRequests;
        }

        public Boolean getReadonlyRootfs() {
            return readonlyRootfs;
        }

        public void setReadonlyRootfs(Boolean readonlyRootfs) {
            this.readonlyRootfs = readonlyRootfs;
        }

        public List<BlkioWeightDevice> getBlkioWeightDevice() {
            return blkioWeightDevice;
        }

        public void setBlkioWeightDevice(List<BlkioWeightDevice> blkioWeightDevice) {
            this.blkioWeightDevice = blkioWeightDevice;
        }

        public Boolean getOomKillDisable() {
            return oomKillDisable;
        }

        public void setOomKillDisable(Boolean oomKillDisable) {
            this.oomKillDisable = oomKillDisable;
        }

        public Long getMemory() {
            return memory;
        }

        public void setMemory(Long memory) {
            this.memory = memory;
        }

        public Boolean getPrivileged() {
            return privileged;
        }

        public void setPrivileged(Boolean privileged) {
            this.privileged = privileged;
        }

        public Boolean getAutoRemove() {
            return autoRemove;
        }

        public void setAutoRemove(Boolean autoRemove) {
            this.autoRemove = autoRemove;
        }

        public Long getMaximumIOBps() {
            return maximumIOBps;
        }

        public void setMaximumIOBps(Long maximumIOBps) {
            this.maximumIOBps = maximumIOBps;
        }

        public Long getCpuPeriod() {
            return cpuPeriod;
        }

        public void setCpuPeriod(Long cpuPeriod) {
            this.cpuPeriod = cpuPeriod;
        }

        public Map<String, String> getSysctls() {
            return sysctls;
        }

        public void setSysctls(Map<String, String> sysctls) {
            this.sysctls = sysctls;
        }

        public Map<String, List<PortBinding>> getPortBindings() {
            return portBindings;
        }

        public void setPortBindings(Map<String, List<PortBinding>> portBindings) {
            this.portBindings = portBindings;
        }

        public List<Object> getLxcConf() {
            return lxcConf;
        }

        public void setLxcConf(List<Object> lxcConf) {
            this.lxcConf = lxcConf;
        }

        public List<Object> getDevices() {
            return devices;
        }

        public void setDevices(List<Object> devices) {
            this.devices = devices;
        }

        public Long getBlkioWeight() {
            return blkioWeight;
        }

        public void setBlkioWeight(Long blkioWeight) {
            this.blkioWeight = blkioWeight;
        }

        public Long getCpuPercent() {
            return cpuPercent;
        }

        public void setCpuPercent(Long cpuPercent) {
            this.cpuPercent = cpuPercent;
        }

        public String getVolumeDriver() {
            return volumeDriver;
        }

        public void setVolumeDriver(String volumeDriver) {
            this.volumeDriver = volumeDriver;
        }

        public Boolean getPublishAllPorts() {
            return publishAllPorts;
        }

        public void setPublishAllPorts(Boolean publishAllPorts) {
            this.publishAllPorts = publishAllPorts;
        }

        public List<Ulimit> getUlimits() {
            return ulimits;
        }

        public void setUlimits(List<Ulimit> ulimits) {
            this.ulimits = ulimits;
        }

        public String getCpusetCpus() {
            return cpusetCpus;
        }

        public void setCpusetCpus(String cpusetCpus) {
            this.cpusetCpus = cpusetCpus;
        }

        public Long getCpuRealtimePeriod() {
            return cpuRealtimePeriod;
        }

        public void setCpuRealtimePeriod(Long cpuRealtimePeriod) {
            this.cpuRealtimePeriod = cpuRealtimePeriod;
        }

        public String getIpcMode() {
            return ipcMode;
        }

        public void setIpcMode(String ipcMode) {
            this.ipcMode = ipcMode;
        }

        public Long getMemoryReservation() {
            return memoryReservation;
        }

        public void setMemoryReservation(Long memoryReservation) {
            this.memoryReservation = memoryReservation;
        }

        public List<BlkioDeviceWriteIOp> getBlkioDeviceWriteIOps() {
            return blkioDeviceWriteIOps;
        }

        public void setBlkioDeviceWriteIOps(List<BlkioDeviceWriteIOp> blkioDeviceWriteIOps) {
            this.blkioDeviceWriteIOps = blkioDeviceWriteIOps;
        }

        public String getCpusetMems() {
            return cpusetMems;
        }

        public void setCpusetMems(String cpusetMems) {
            this.cpusetMems = cpusetMems;
        }

        public List<BlkioDeviceWriteBp> getBlkioDeviceWriteBps() {
            return blkioDeviceWriteBps;
        }

        public void setBlkioDeviceWriteBps(List<BlkioDeviceWriteBp> blkioDeviceWriteBps) {
            this.blkioDeviceWriteBps = blkioDeviceWriteBps;
        }

        public RestartPolicy getRestartPolicy() {
            return restartPolicy;
        }

        public void setRestartPolicy(RestartPolicy restartPolicy) {
            this.restartPolicy = restartPolicy;
        }

        public Long getCpuRealtimeRuntime() {
            return cpuRealtimeRuntime;
        }

        public void setCpuRealtimeRuntime(Long cpuRealtimeRuntime) {
            this.cpuRealtimeRuntime = cpuRealtimeRuntime;
        }

        public String getNetworkMode() {
            return networkMode;
        }

        public void setNetworkMode(String networkMode) {
            this.networkMode = networkMode;
        }

        public String getPidMode() {
            return pidMode;
        }

        public void setPidMode(String pidMode) {
            this.pidMode = pidMode;
        }

        public List<BlkioDeviceReadBp> getBlkioDeviceReadBps() {
            return blkioDeviceReadBps;
        }

        public void setBlkioDeviceReadBps(List<BlkioDeviceReadBp> blkioDeviceReadBps) {
            this.blkioDeviceReadBps = blkioDeviceReadBps;
        }

        public Long getCpuShares() {
            return cpuShares;
        }

        public void setCpuShares(Long cpuShares) {
            this.cpuShares = cpuShares;
        }

        public Long getNanoCpus() {
            return nanoCpus;
        }

        public void setNanoCpus(Long nanoCpus) {
            this.nanoCpus = nanoCpus;
        }

        public Long getMaximumIOps() {
            return maximumIOps;
        }

        public void setMaximumIOps(Long maximumIOps) {
            this.maximumIOps = maximumIOps;
        }

        public Long getMemorySwap() {
            return memorySwap;
        }

        public void setMemorySwap(Long memorySwap) {
            this.memorySwap = memorySwap;
        }

        public String getContainerIDFile() {
            return containerIDFile;
        }

        public void setContainerIDFile(String containerIDFile) {
            this.containerIDFile = containerIDFile;
        }

        public Long getOomScoreAdj() {
            return oomScoreAdj;
        }

        public void setOomScoreAdj(Long oomScoreAdj) {
            this.oomScoreAdj = oomScoreAdj;
        }

        public List<BlkioDeviceReadIOp> getBlkioDeviceReadIOps() {
            return blkioDeviceReadIOps;
        }

        public void setBlkioDeviceReadIOps(List<BlkioDeviceReadIOp> blkioDeviceReadIOps) {
            this.blkioDeviceReadIOps = blkioDeviceReadIOps;
        }

        public Long getShmSize() {
            return shmSize;
        }

        public void setShmSize(Long shmSize) {
            this.shmSize = shmSize;
        }

        public Long getKernelMemory() {
            return kernelMemory;
        }

        public void setKernelMemory(Long kernelMemory) {
            this.kernelMemory = kernelMemory;
        }

        public LogConfig getLogConfig() {
            return logConfig;
        }

        public void setLogConfig(LogConfig logConfig) {
            this.logConfig = logConfig;
        }

        public List<String> getExtraHosts() {
            return extraHosts;
        }

        public void setExtraHosts(List<String> extraHosts) {
            this.extraHosts = extraHosts;
        }

        public static class Ulimit {

        }

        public static class RestartPolicy {

            @JsonProperty("MaximumRetryCount")
            private Long maximumRetryCount;

            @JsonProperty("Name")
            private String name;

            public Long getMaximumRetryCount() {
                return maximumRetryCount;
            }

            public void setMaximumRetryCount(Long maximumRetryCount) {
                this.maximumRetryCount = maximumRetryCount;
            }

            public String getName() {
                return name;
            }

            public void setName(String name) {
                this.name = name;
            }
        }

        public static class PortBinding {

            @JsonProperty("HostIp")
            private String hostIp;

            @JsonProperty("HostPort")
            private Long hostPort;

            public String getHostIp() {
                return hostIp;
            }

            public void setHostIp(String hostIp) {
                this.hostIp = hostIp;
            }

            public Long getHostPort() {
                return hostPort;
            }

            public void setHostPort(Long hostPort) {
                this.hostPort = hostPort;
            }
        }

        public static class LogConfig {

            @JsonProperty("Type")
            private String type;

            public String getType() {
                return type;
            }

            public void setType(String type) {
                this.type = type;
            }
        }

        public static class DeviceRequest {

            @JsonProperty("Options")
            private Options options;

            @JsonProperty("Capabilities")
            private List<String> capabilities;

            @JsonProperty("Driver")
            private String driver;

            @JsonProperty("Count")
            private Long count;

            @JsonProperty("DeviceIDs")
            private List<String> deviceIDs;

            public Options getOptions() {
                return options;
            }

            public void setOptions(Options options) {
                this.options = options;
            }

            public List<String> getCapabilities() {
                return capabilities;
            }

            public void setCapabilities(List<String> capabilities) {
                this.capabilities = capabilities;
            }

            public String getDriver() {
                return driver;
            }

            public void setDriver(String driver) {
                this.driver = driver;
            }

            public Long getCount() {
                return count;
            }

            public void setCount(Long count) {
                this.count = count;
            }

            public List<String> getDeviceIDs() {
                return deviceIDs;
            }

            public void setDeviceIDs(List<String> deviceIDs) {
                this.deviceIDs = deviceIDs;
            }

            public static class Options {

                @JsonProperty("property2")
                private String property2;

                @JsonProperty("property1")
                private String property1;

                public String getProperty2() {
                    return property2;
                }

                public void setProperty2(String property2) {
                    this.property2 = property2;
                }

                public String getProperty1() {
                    return property1;
                }

                public void setProperty1(String property1) {
                    this.property1 = property1;
                }
            }
        }

        public static class BlkioDeviceReadBp {

        }

        public static class BlkioDeviceReadIOp {

        }

        public static class BlkioDeviceWriteBp {

        }

        public static class BlkioDeviceWriteIOp {

        }

        public static class BlkioWeightDevice {

        }

        public List<String> getDns() {
            return dns;
        }

        public void setDns(List<String> dns) {
            this.dns = dns;
        }
    }

    public static class Config {

        @JsonProperty("StopSignal")
        private String stopSignal;

        @JsonProperty("User")
        private String user;

        @JsonProperty("AttachStderr")
        private Boolean attachStderr;

        @JsonProperty("Hostname")
        private String hostname;

        @JsonProperty("Labels")
        private Map<String, String> labels;

        @JsonProperty("OpenStdin")
        private Boolean openStdin;

        @JsonProperty("Healthcheck")
        private Healthcheck healthcheck;

        @JsonProperty("Env")
        private List<String> env;

        @JsonProperty("Image")
        private String image;

        @JsonProperty("MacAddress")
        private String macAddress;

        @JsonProperty("NetworkDisabled")
        private Boolean networkDisabled;

        @JsonProperty("StdinOnce")
        private Boolean stdinOnce;

        @JsonProperty("AttachStdout")
        private Boolean attachStdout;

        @JsonProperty("WorkingDir")
        private String workingDir;

        @JsonProperty("Volumes")
        private Map<String, Object> volumes;

        @JsonProperty("AttachStdin")
        private Boolean attachStdin;

        @JsonProperty("Domainname")
        private String domainname;

        @JsonProperty("Tty")
        private Boolean tty;

        @JsonProperty("Cmd")
        private List<String> cmd;

        @JsonProperty("StopTimeout")
        private Long stopTimeout;

        public String getStopSignal() {
            return stopSignal;
        }

        public void setStopSignal(String stopSignal) {
            this.stopSignal = stopSignal;
        }

        public String getUser() {
            return user;
        }

        public void setUser(String user) {
            this.user = user;
        }

        public Boolean getAttachStderr() {
            return attachStderr;
        }

        public void setAttachStderr(Boolean attachStderr) {
            this.attachStderr = attachStderr;
        }

        public String getHostname() {
            return hostname;
        }

        public void setHostname(String hostname) {
            this.hostname = hostname;
        }

        public Map<String, String> getLabels() {
            return labels;
        }

        public void setLabels(Map<String, String> labels) {
            this.labels = labels;
        }

        public Boolean getOpenStdin() {
            return openStdin;
        }

        public void setOpenStdin(Boolean openStdin) {
            this.openStdin = openStdin;
        }

        public Healthcheck getHealthcheck() {
            return healthcheck;
        }

        public void setHealthcheck(Healthcheck healthcheck) {
            this.healthcheck = healthcheck;
        }

        public List<String> getEnv() {
            return env;
        }

        public void setEnv(List<String> env) {
            this.env = env;
        }

        public String getImage() {
            return image;
        }

        public void setImage(String image) {
            this.image = image;
        }

        public String getMacAddress() {
            return macAddress;
        }

        public void setMacAddress(String macAddress) {
            this.macAddress = macAddress;
        }

        public Boolean getNetworkDisabled() {
            return networkDisabled;
        }

        public void setNetworkDisabled(Boolean networkDisabled) {
            this.networkDisabled = networkDisabled;
        }

        public Boolean getStdinOnce() {
            return stdinOnce;
        }

        public void setStdinOnce(Boolean stdinOnce) {
            this.stdinOnce = stdinOnce;
        }

        public Boolean getAttachStdout() {
            return attachStdout;
        }

        public void setAttachStdout(Boolean attachStdout) {
            this.attachStdout = attachStdout;
        }

        public String getWorkingDir() {
            return workingDir;
        }

        public void setWorkingDir(String workingDir) {
            this.workingDir = workingDir;
        }

        public Map<String, Object> getVolumes() {
            return volumes;
        }

        public void setVolumes(Map<String, Object> volumes) {
            this.volumes = volumes;
        }

        public Boolean getAttachStdin() {
            return attachStdin;
        }

        public void setAttachStdin(Boolean attachStdin) {
            this.attachStdin = attachStdin;
        }

        public String getDomainname() {
            return domainname;
        }

        public void setDomainname(String domainname) {
            this.domainname = domainname;
        }

        public Boolean getTty() {
            return tty;
        }

        public void setTty(Boolean tty) {
            this.tty = tty;
        }

        public List<String> getCmd() {
            return cmd;
        }

        public void setCmd(List<String> cmd) {
            this.cmd = cmd;
        }

        public Long getStopTimeout() {
            return stopTimeout;
        }

        public void setStopTimeout(Long stopTimeout) {
            this.stopTimeout = stopTimeout;
        }

        public static class Healthcheck {

            @JsonProperty("Test")
            private List<String> test;

            public List<String> getTest() {
                return test;
            }

            public void setTest(List<String> test) {
                this.test = test;
            }
        }
    }

    public static class State {

        @JsonProperty("Status")
        private String status;

        @JsonProperty("Restarting")
        private Boolean restarting;

        @JsonProperty("Dead")
        private Boolean dead;

        @JsonProperty("Health")
        private Health health;

        @JsonProperty("ExitCode")
        private Long exitCode;

        @JsonProperty("Running")
        private Boolean running;

        @JsonProperty("Error")
        private String error;

        @JsonProperty("FinishedAt")
        private String finishedAt;

        @JsonProperty("OOMKilled")
        private Boolean oOMKilled;

        @JsonProperty("Pid")
        private Long pid;

        @JsonProperty("StartedAt")
        private String startedAt;

        @JsonProperty("Paused")
        private Boolean paused;

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }

        public Boolean getRestarting() {
            return restarting;
        }

        public void setRestarting(Boolean restarting) {
            this.restarting = restarting;
        }

        public Boolean getDead() {
            return dead;
        }

        public void setDead(Boolean dead) {
            this.dead = dead;
        }

        public Health getHealth() {
            return health;
        }

        public void setHealth(Health health) {
            this.health = health;
        }

        public Long getExitCode() {
            return exitCode;
        }

        public void setExitCode(Long exitCode) {
            this.exitCode = exitCode;
        }

        public Boolean getRunning() {
            return running;
        }

        public void setRunning(Boolean running) {
            this.running = running;
        }

        public String getError() {
            return error;
        }

        public void setError(String error) {
            this.error = error;
        }

        public String getFinishedAt() {
            return finishedAt;
        }

        public Date getFinishedAtDate() {
            if (finishedAt == null) return null;
            ZonedDateTime zonedDateTime = ZonedDateTime.parse(finishedAt, DateTimeFormatter.ISO_DATE_TIME);
            return Date.from(zonedDateTime.toInstant());
        }

        public void setFinishedAt(String finishedAt) {
            this.finishedAt = finishedAt;
        }

        public Boolean getoOMKilled() {
            return oOMKilled;
        }

        public void setoOMKilled(Boolean oOMKilled) {
            this.oOMKilled = oOMKilled;
        }

        public Long getPid() {
            return pid;
        }

        public void setPid(Long pid) {
            this.pid = pid;
        }

        public String getStartedAt() {
            return startedAt;
        }

        public Date getStartedAtDate() {
            if (startedAt == null) return null;
            ZonedDateTime zonedDateTime = ZonedDateTime.parse(startedAt, DateTimeFormatter.ISO_DATE_TIME);
            return Date.from(zonedDateTime.toInstant());
        }

        public void setStartedAt(String startedAt) {
            this.startedAt = startedAt;
        }

        public Boolean getPaused() {
            return paused;
        }

        public void setPaused(Boolean paused) {
            this.paused = paused;
        }

        public static class Health {

            @JsonProperty("Status")
            private String status;

            @JsonProperty("Log")
            private List<Log> log;

            @JsonProperty("FailingStreak")
            private Long failingStreak;

            public String getStatus() {
                return status;
            }

            public void setStatus(String status) {
                this.status = status;
            }

            public List<Log> getLog() {
                return log;
            }

            public void setLog(List<Log> log) {
                this.log = log;
            }

            public Long getFailingStreak() {
                return failingStreak;
            }

            public void setFailingStreak(Long failingStreak) {
                this.failingStreak = failingStreak;
            }

            public static class Log {

                @JsonProperty("Start")
                private String start;

                @JsonProperty("ExitCode")
                private Long exitCode;

                @JsonProperty("Output")
                private String output;

                @JsonProperty("End")
                private String end;

                public String getStart() {
                    return start;
                }

                public void setStart(String start) {
                    this.start = start;
                }

                public Long getExitCode() {
                    return exitCode;
                }

                public void setExitCode(Long exitCode) {
                    this.exitCode = exitCode;
                }

                public String getOutput() {
                    return output;
                }

                public void setOutput(String output) {
                    this.output = output;
                }

                public String getEnd() {
                    return end;
                }

                public void setEnd(String end) {
                    this.end = end;
                }
            }
        }
    }
}